/*****************************************************************************
 * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
 * for personal, academic, and non-profit purposes.  Commercial use          *
 * permitted only by explicit agreement with Jim Kent (jim_kent@pacbell.net) *
 *****************************************************************************/
/* patSpace - a homology finding algorithm that occurs mostly in
 * pattern space (as opposed to offset space). */

#ifndef PATSPACE_H
#define PATSPACE_H

#ifndef DNASEQ_H
#include "dnaseq.h"
#endif

struct patSpace *makePatSpace(
    struct dnaSeq **seqArray, /* Array of sequence lists. */
    int seqArrayCount,        /* Size of above array. */
    int seedSize, /* Alignment seed size - 10 or 11. Must match oocFileName */
    char *oocFileName, /* File with tiles to filter out, may be NULL. */
    int minMatch,      /* Minimum # of matching tiles.  4 is good. */
    int maxGap         /* Maximum gap size - 32k is good for
                          cDNA (introns), 500 is good for DNA assembly. */
    );
/* Allocate a pattern space and fill from sequences.  (Each element of
   seqArray is a list of sequences. */

void freePatSpace(struct patSpace **pPatSpace);
/* Free up a pattern space. */

struct patClump
/* This holds pattern space output - a list of homologous clumps. */
{
  struct patClump *next; /* Link to next in list. */
  int bacIx;             /* Index of .fa file where hit occurs. */
  int seqIx;             /* Index of contig where hit occurs. */
  struct dnaSeq *seq;    /* Sequence in which hit occurs. */
  int start;             /* Start offset within sequence. */
  int size;              /* Size of block within sequence. */
};

struct patClump *patSpaceFindOne(struct patSpace *ps, DNA *dna, int dnaSize);
/* Find occurrences of DNA in patSpace. The resulting list can be
 * freed with slFreeList. */

#endif /* PATSPACE_H */
